home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / Projects / Tutorial Material / Zone Tutorial / Structure Notes / 3. Sequencing < prev    next >
Lisp/Scheme  |  1998-10-26  |  2KB  |  61 lines

  1. Sequencing Expressions - the fill-template Trick 
  2.  
  3. You won't always be creating one-piece material from 
  4. generators. There may be occasions when you will want to 
  5. have an instrument playing a short symbol melody but looping 
  6. through a long series of note-lengths - and then changing to 
  7. a new symbol melody, a new series of note lengths and a new 
  8. tonality simultaneously. Suppose we have these expressions:
  9.  
  10. ; Nigel has been using tick value 96 for 1/4 note. 
  11. ; Because Nigel often mixes ticks and ratios, the function must take
  12. ; both cases into account.
  13.  
  14. (defun use-nigel-ticks (l)
  15.   (let (out)
  16.     (dolist (x l)
  17.       (if (is-length-symbol x)
  18.         (push x out)
  19.         (push (* x 5) out)))
  20.     (nreverse out)))
  21.  
  22. (setq tonal (activate-tonality (dorian c 4) 
  23. (pentatonic b& 3)))
  24.  
  25. (setq rhy1 (gen-loop '((1 4 2) (5 6 4) (1 6 3))
  26.                      (use-nigel-ticks '(24 24 24 24 48 48))))
  27. (setq rhy2 (gen-fibonacci 5 '(24 24 48) 
  28.                           (use-nigel-ticks '(96 24 24 48))))
  29.  
  30. (setq zone1 (list (apply '+ rhy1)))
  31. (setq zone2 (list (apply '+ rhy2)))
  32.  
  33. (setq mel1 '(a b c d))
  34. (setq mel2 '(a d b c))
  35.  
  36. We want the symbol melodies to loop for exactly the right 
  37. number of symbols to match the note lengths we have generated.
  38. We don't want to have to write out all the symbols manually 
  39. inside the melody description. And, we want to be able to 
  40. sequence melody and rhythm like this:
  41.  
  42. (setq rhys (append rhy1 rhy2 rhy1))
  43. (setq mels (append mel1 mel2 mel1))
  44. (setq zones (append zone1 zone2 zone1))
  45.  
  46. The function fill-template comes to the rescue letting us 
  47. fill templates made from rhy1 and rhy2 with our symbol
  48. melodies.  The symbol melody definitions will be rewritten 
  49. like this:
  50.  
  51. (setq mel1 (fill-template rhy1 '(a b c d))
  52. (setq mel2 (fill-template rhy2  '(a d b c))
  53.  
  54. The STRUCT3A-C examples show how this device can be extended 
  55. to being melody-led i.e having a short rhythmic figure 'fill' 
  56. a template of a long symbol pattern (from a gen-noise-white 
  57. generator). STRUCT3 demonstrates how this technique can be 
  58. adapted to control a whole ensemble of parts in a short 
  59. jazz-rock sequence.
  60.  
  61.